SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paChequearRectificacionBajaDeServicioBK29072008]
-- <DESCRIPCION> Realiza el chequeo de chequeo de rectificatoria de baja.
-- <CONSIDERACIONES ESPECIALES> 
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_ColaDeMovimientos, tb_PlazasDeMovimiento
-- <PROCEDIMIENTOS> paChequearIncompatibilidadHoraria
-- <ACTUALIZACIONES> 08 - 04 - 2006 por OTERO, Javier (Se agrega el control de incompatibilidad)

---- ACTUALIZADO EN DB
-- 12-04/2006 - SANES, Jorge

@idCola int,
@Estado INT OUTPUT,
@Diagnostico VARCHAR(1000) OUTPUT
AS
SET NOCOUNT ON
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @idPlaza INT
DECLARE @SubServicio INT
DECLARE @TipoDePaquete INT
DECLARE @fechabaja DATETIME
DECLARE @fechaalta DATETIME
DECLARE @causabaja INT
DECLARE @plazadisponibilidad INT
DECLARE @cod INT
DECLARE @FAltaPlaza DATETIME
DECLARE @FBajaPlaza DATETIME
DECLARE @Destino INT
DECLARE @Baja VARCHAR(1)
DECLARE @error INT
-- Para almacenar el modo del usuario.
DECLARE @Modo INT
DECLARE @Deshacer VARCHAR(1)
DECLARE @FechaBajaServicio DATETIME
DECLARE @Servicio INT
DECLARE @Agente INT

SELECT @Modo = Modo FROM tb_Usuarios WHERE NTUser = SYSTEM_USER


-- Variable para retornar el diagnostico del check
--declare @diagnostico varchar(1000)
SELECT @Diagnostico = '1'
SELECT @error = 0
SELECT @cod = 0


SELECT @idPlaza = idPlaza, @SubServicio = Servicio, @PlazaDisponibilidad = PlazaDestino, @CausaBaja = CausaBaja, @Deshacer = Borrar FROM tb_PlazasDeMovimiento WHERE idCola = @idCola
SELECT @FechaAlta = FechaAlta, @FechaBajaServicio = FechaBaja, @Servicio = ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
SELECT @FechaBaja = Fecha2 from tb_ColaDeMovimientos WHERE idCola = @idCola
SELECT @Agente = Agente FROM tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio

IF @Deshacer IS NULL
	SELECT @Deshacer = 'N'

--declare @Diagnostico varchar(1000)
SELECT @Diagnostico = '1'
SELECT @error = 0

-- Control de Incompatibilidad (agregado el 09 - 04 - 2006)
-- Si se deshace la Licencia o bien se rectifica la Fecha de Baja
IF (@Deshacer = 'S')
	OR (@FechaBaja <> @FechaBajaServicio)
BEGIN
	DECLARE @HorasMediaIniciales INT, @HorasTerciariasIniciales INT, @HorasCargoIniciales INT
	DECLARE @EsIncompatible BIT, @Horas INT, @HorasTerciarias INT
	DECLARE @Fecha DATETIME
	SELECT @HorasMediaIniciales = 0, @HorasTerciariasIniciales = 0, @HorasCargoIniciales = 0

	-- Si la causa de alta del Servicio no es por Articulo 131 o 125c.
	IF NOT EXISTS(SELECT IdServicioAgente FROM tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio AND CausaAlta IN (12, 18))
		SELECT @HorasMediaIniciales = CASE WHEN C.RegimenSalarial = 13 AND CargoSalarial <> 4001 THEN S.Horas ELSE 0 END,
			 @HorasTerciariasIniciales = CASE WHEN C.RegimenSalarial = 13 AND S.CargoSalarial = 4001 THEN S.Horas 
							   WHEN C.RegimenSalarial = 12 AND C.Escalafon = 24 THEN C.EquivHoraria ELSE 0 END,
			 @HorasCargoIniciales = CASE WHEN C.RegimenSalarial = 12 AND C.Escalafon <> 24 THEN C.EquivHoraria ELSE 0 END
		FROM tb_ServiciosAgentes S INNER JOIN tb_CargosSalariales C ON C.IdCargo = S.CargoSalarial
		WHERE IdServicioAgente = @Servicio

	IF @Deshacer = 'S'
		SELECT @Fecha = DATEADD(DAY, 1, @FechaAlta)
	ELSE
		SELECT @Fecha = @FechaBaja

	-- Se llama al procedimiento de chequeo de Incompatibilidad
	EXEC paChequearIncompatibilidadHoraria @Agente, @HorasMediaIniciales, @HorasTerciariasIniciales, @HorasCargoIniciales, @Fecha, @Fecha, @EsIncompatible OUTPUT, @Horas OUTPUT, @HorasTerciarias OUTPUT
	
	IF @EsIncompatible = 1
	BEGIN
		SELECT @Error = 3,@Diagnostico= '* Rectificando  la licencia el Agente entraria en Incompatibilidad Horaria ( Horas Totales: '+CONVERT(VARCHAR, @Horas)+' Horas Terciarias: ' + CONVERT(VARCHAR, @HorasTerciarias) + ')'
	END
END

IF @FechaBaja <= @FechaAlta 
BEGIN
 --Se actualiza el estado en CHECK NO OK
 --update tb_PlazasDeMovimiento set estado = 3 where idCola = @idCola
 --Select @Estado = 3
 SELECT  @Diagnostico = @Diagnostico+'*'+'La fecha de Baja es inferior a la fecha de alta del Servicio!...'
 SELECT @error = 3
END

IF @PlazaDisponibilidad IS NULL AND @CausaBaja = 8
BEGIN
  SELECT @Error = 3, @Diagnostico=@Diagnostico+'*'+'Cuando la causa de baja es PASE A DISPONIBILIDAD debe seleccioar una PLAZA DESTINO con division = N'
END

IF @PlazaDisponibilidad is not null and @CausaBaja = 8 and ltrim(rtrim((Select d.division from tb_Divisiones d, tb_Plazas p where idDivision = p.division and idPlaza = @PlazaDisponibilidad))) <> 'N'
BEGIN
   SELECT @Error = 3, @Diagnostico=@Diagnostico+'*'+'La Division de la Plaza Destino debe tener division = N.  Si no existe la plaza deberia crearla'	
END

IF EXISTS(SELECT top 1 S.FechaBaja FROM tb_ServiciosAgentes S INNER JOIN tb_SubServiciosAgentes SS ON idServicioagente = ServicioAgente WHERE idSubServicio = @SubServicio AND S.FechaBaja IS NOT NULL)
BEGIN
	SELECT @Error = 3, @Diagnostico=@Diagnostico+'*'+'El Servicio ya se encuentra dado de baja'
END

UPDATE tb_ColaDeMovimientos SET estado = @cod,
ChequeoEscuela = CASE WHEN @Modo = 2 THEN @Diagnostico ELSE ChequeoEscuela END
WHERE idCola = @idCola

--select @diagnostico as diagnostico

SET @Estado = @Cod
GO
